// requestInterceptor.js
import { BASE_URL, APP_ID } from './config.js';
// 导入封装的本地存储操作模块
import { getStorage, clearStorage } from './storage';
// 导入封装的增强 API
import { toast, modal } from './extendApi';

// 从本地存储获取鉴权参数的函数（假设使用微信小程序的本地存储API）
const getAuthParamsFromStorage = () => {
    const token = getStorage('token');
    const timeStamp = getStorage('timeStamp');
    const appId = APP_ID;
    if (token === null || token === "") {
        return null;
    }
    return { token, timeStamp, appId };
};

// 自定义请求函数
const request = (options) => {
    let dataToSend = options.data;
    return new Promise((resolve, reject) => {
        const authParams = getAuthParamsFromStorage();
        if (authParams === null) {
            toast({ title: "鉴权参数为空，请先登录" });
            reject(new Error('鉴权参数为空，请先登录'));
            return;
        }
        let url = BASE_URL + options.url;
        if (authParams) {
            const params = [];
            params.push(`appId=${authParams.appId}`);
            params.push(`timeStamp=${authParams.timeStamp}`);
            params.push(`token=${authParams.token}`);

            // 判断 URL 是否包含问号以确定是否为第一个参数
            const separator = url.includes('?') ? '&' : '?';
            url = url + separator + params.join('&');
        }
        const requestOptions = {
            url: url,
            method: options.method || 'GET',
            data: dataToSend || {},
            // 这里将success、fail、complete合并为一个完整的回调函数，以更好地控制请求流程
            complete: (res) => {
                console.log(options.method + '请求发出，请求路径为url=' + url);
                if (res.statusCode === 200) {
                    // 发送请求成功，根据后台返回的数据定义的状态码进行提示
                    if (res.data.code === 200) {
                        resolve(res);
                    } else if (res.data.code === 502) {
                        toast({ title: "鉴权失效，请重新登录" });
                        clearStorage();
                        wx.navigateTo({
                            url: '/pages/login/login'
                        });
                        reject(new Error('鉴权失效，请重新登录'));
                    } else {
                        const errorMessage = res.data.msg || '未知错误';
                        reject(new Error(`请求出现错误：${errorMessage}`));
                    }
                } else {
                    reject(new Error("请求连接错误，请联系管理员"));
                }
            }
        };
        wx.request(requestOptions);
    });
};

export default request;